[小ネタ] EC2インスタンスメタデータを簡単に確認する (PowerShell編)
しばたです。
AWS CLIとEC2 Instance Metadata Query Toolを使ってインスタンスメタデータへアクセスをするネタが弊社望月によって公開されていますが、本記事ではAWS Tools for PowerShellを使った場合の方法を紹介します。
前提条件
AWS Tools for PowerShellバージョン3系のはなしです。
バージョン2以前は該当しませんので注意してください。
Get-EC2InstanceMetadata
AWS Tools for PowerShellではVer.3.1.73.0(2016-05-26)からGet-EC2InstanceMetadataコマンドレットが提供されておりメタデータへのアクセスが抽象化されています。
このコマンドレットではListCategory
パラメータを使うとメタデータのカテゴリ一覧を取得できます。
Get-EC2InstanceMetadata -ListCategory
そしてCategory
パラメータを指定してカテゴリ毎のメタデータを取得できます。
Get-EC2InstanceMetadata -Category AmiId
また、Path
パラメータを指定して階層の深いところにあるメタデータを一発で取得することも可能です。
Get-EC2InstanceMetadata -Path /network/interfaces/macs
その他細かい点についてはコマンドレットのリファレンスを参照してください。
Amazon.Util.EC2InstanceMetadata クラス
ここまでは普通にドキュメントにも載っている手段ですが、ここからはちょっと裏技的な方法を紹介します。
AWS Tools for PowerShellは内部でAWS SDK for .NETを使っており、このSDKにはユーティリティクラスとしてAmazon.Util.EC2InstanceMetadataが提供されています。
PowerShellは.NETのオブジェクトを扱うシェルですのでこのAmazon.Util.EC2InstanceMetadata
クラスを直接扱うことができます。
先ほどのGet-EC2InstanceMetadata
コマンドレットで取得した情報も以下の様な感じで取得できます。
(カテゴリ情報は Get-EC2InstanceMetadata 独自のものなので取得できません)
# クラスをロードするために`Import-Module`を明示する必要があります
Import-Module AWSPowerShell
[Amazon.Util.EC2InstanceMetadata]::AmiId
[Amazon.Util.EC2InstanceMetadata]::NetworkInterfaces[0].MacAddress
# PowerShell 3.0以降で可能な記法
[Amazon.Util.EC2InstanceMetadata]::NetworkInterfaces.MacAddress
こちらも細かい内容はリファレンスを参照してください。
最後に
本記事ではPowerShellを使った2通りのメタデータの取得方法を紹介しました。
用途に応じて好きな方を使えば良いと思います。
個人的にはコンソール上でちょっとデータを確認するときはGet-EC2InstanceMetadata
を、スクリプト中ではAmazon.Util.EC2InstanceMetadata
を使うのが良さそうだなと感じています。
もちろんこれらの機能を使わずInvoke-WebRequest
やInvoke-RestMethod
を使い続けるのも良いでしょう。
とくに応答速度が重視されるときはInvoke-WebRequest
やInvoke-RestMethod
の方が良い場合が多いと思います。